我正在尝试使用名称作为url,就像stackoverflow一样。我有一个godaddy linux主机,并使用.htaccess来控制mod_rewrite网址。
我正在努力获得以下内容:
这是我到目前为止所做的并且它不起作用:
## Mod rewrite manual: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html
<IfModule mod_rewrite.c>
RewriteEngine On
# try the corresponding php file
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ([A-Za-z0-9_-]+) $1.php [qsa]
# special cases
RewriteRule ^schools\/add$ add-school.php
# API
RewriteRule ^api\/questions\/ask$ "api.php?action=ask" [qsa]
RewriteRule ^api\/questions\/(\d+)$ "api.php?action=get&id=$1" [qsa]
RewriteRule ^api\/questions\/(\d+)\/points$ "api.php?action=get-points&id=$1" [qsa]
</IfModule>
答案 0 :(得分:1)
所以你的第一个RewriteRule正在接管。当你去学校/添加并且文件不存在时,它会将你重定向到schools.php,这也是不存在的,所以你只需要对它们进行重新排序,当我们在它时删除转义:
## Mod rewrite manual: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html
<IfModule mod_rewrite.c>
RewriteEngine On
# special cases
RewriteRule ^schools/add$ add-school.php
# API
RewriteRule ^api/questions/ask$ api.php?action=ask [qsa]
RewriteRule ^api/questions/(d+)$ api.php?action=get&id=$1 [qsa]
RewriteRule ^api/questions/(d+)/points$ api.php?action=get-points&id=$1 [qsa]
# try the corresponding php file
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ([A-Za-z0-9_-]+) $1.php [qsa]
</IfModule>
答案 1 :(得分:1)
您的代码中几乎没有错误:
L
(最后一个)标记规则的单个结尾。.php
您需要确保php文件确实存在。这些建议在这里是你修改过的代码:
Options +FollowSymLinks -MultiViews
<IfModule mod_rewrite.c>
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
# special cases
RewriteRule ^schools/add/?$ /add-school.php [L,NC]
# API
RewriteRule ^api/questions/ask/?$ /api.php?action=ask [L,QSA,NC]
RewriteRule ^api/questions/(d+)/points/?$ /api.php?action=get-points&id=$1 [L,QSA,NC]
RewriteRule ^api/questions/(d+)/?$ /api.php?action=get&id=$1 [L,QSA,NC]
# try the corresponding php file if it exists
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+?)/?$ $1.php [L]
</IfModule>