我想要以下内容:
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/logout
,RewriteRule ^ap/(.*)$ api/$1.php
它工作正常。有什么想法如何使目录名称起作用吗?
更新4:
我将链接todo.js(从Windows / System32 / drivers / etc中的主机)重定向到127.0.0.1,然后编辑httpd-vhosts.conf
并添加了以下内容:
<VirtualHost todo.js:80>
ServerAdmin [email protected]
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]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句