gpt4 book ai didi

php - 网址重写不适用于 Apache

转载 作者:搜寻专家 更新时间:2023-10-31 20:41:27 25 4
gpt4 key购买 nike

我想要以下内容:

myhomepage.com <- 这应该变成这个 -> myhomepage.com/index.php

myhomepage.com/mypage <- 应该转到这个 -> myhomepage.com/index.php?page=mypage

myhomepage.com/mypage/mymethod <- 应该转到这个 -> myhomepage.com/index.php?page=mypage&method=mymethod

myhomepage.com/api/logout <- 应该转到这个 -> myhomepage/api/logout.php

这是我的 .htaccess 文件:

RewriteEngine On

RewriteBase /

RewriteRule ^/api/(.*)$ api/$1.php

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)/(.*)$ index.php?page=$1&method=$2&item=$3

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)$ index.php?page=$1&method=$2

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1

一切正常,但使用 api 的规则似乎不起作用。

更新 1:

RewriteRule ^/api/(.*)$ api/$1.php

当我调用 myhomepage.com/api/logout 时,它会将其重写为 myhomepage.com/index.php?page=api&method=logout

更新 2:

我的第一个想法是,也许有类似默认 rewrite_module 的东西。它将所有不是文件的东西重写为 index.html 或类似的东西。尤其是当我使用 XAMPP 时。

更新 3:

经过一些试验,我发现我不能用 api 调用它,因为它是一个目录。例如,当我用 myhomepage.com/ap/logoutRewriteRule ^ap/(.*)$ api/$1.php 重写它时,它工作正常。有什么想法可以使它与目录名称一起工作吗?

更新 4:

我将链接 todo.js(从 Windows/System32/drivers/etc 中的主机)重定向到 127.0.0.1然后我编辑了 httpd-vhosts.conf 并添加了以下内容:

<VirtualHost todo.js:80>
ServerAdmin slajaa09@htlkaindorf.at
DocumentRoot "C:/xampp/htdocs/todo"
ServerName todo.js
ServerAlias todo.js
</VirtualHost>

而我的api文件夹是htdocs/todo的子目录

*解决方案:*

这是我的问题的最终解决方案:

ErrorDocument 404 /error.php

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule api/([^/]+)/?$ api/$1.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/(.+)/(.*)$ index.php?page=$1&method=$2&item=$3 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/(.*)$ index.php?page=$1&method=$2 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]

特别感谢 anubhava!

最佳答案

前导斜杠在 .htaccess 中不匹配因为.htaccess是每个目录指令,Apache 从 RewriteRule 中删除当前目录路径(因此前导斜线) URI 模式。

在您的 DOCUMENT_ROOT/.htaccess 中使用这些规则文件:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule api/([^/]+)/?$ api/$1.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/(.*)$ index.php?page=$1&method=$2&item=$3 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/(.*)$ index.php?page=$1&method=$2 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ index.php?page=$1 [L,QSA]

关于php - 网址重写不适用于 Apache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20617389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com