我正在尝试让以下功能在没有框架的情况下在PHP中工作。我不想为我做的每个PHP应用程序都要担心设置一个超级复杂的框架。http://domain.com/sign_up.php becomes http://domain.com/sign_up/
http://domain.com/user.php?id=432 becomes http://domain.com/user/?id=432
或者如果有一种方法可以让它变成http://domain.com/user/432
,但我不确定如何在这种情况下处理多个$_GET
变量,所以这是可选的。
到目前为止,这一点做得很好:RewriteRule ^sign_up/([^/]*)$ /sign_up.php?p=$1 [L]
唯一的问题是我必须为我使用的每一个PHP文件做这件事,这可能会变得很多。
什么是一个通用的方法来做所有的php文件?
更新:
这一行工作得很好:RewriteRule ^(.*)\/$ $1.php [NC]
唯一的问题是它不会自动重定向PHP
例如,我想301自动重定向:http://domain.com/file.php to http://domain.com/file/
然后呢http://domain.com/file.php?var1=value&var2=value to http://domain.com/file/?var1=value&var2=value
如果有人能想到一个更好的方法来处理查询字符串值在一个更SEO友好的方式,这将是可怕的!但除此之外,这是工作相当伟大的迄今为止。
更多更新:
现在这是工作:http://domain.com/file/
-至-http://domain.com/file.php
这两个都指向同一个页面,并使用htaccess代码:RewriteRule ^(.*)\/$ $1.php [NC]
但是,没有尾随/
的http://domain.com/file
返回未找到页面错误。
我也需要知道如何自动重定向http://domain.com/file.php
到http://domain.com/file/
大部分工作HTACCESS
这个.htaccess工作得很好:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\.(php|html?|jpg|gif)$
RewriteRule ^(.*)([^/])$ http://%{HTTP_HOST}/$1$2/ [L,R=301]
RewriteRule ^(.*)\/$ $1.php [NC]
它唯一不做的是自动重定向,如果他们直接转到http://domain.com/file.php
,它不会重定向到http://domain.com/file/
,但其他一切都是工作的。
3条答案
按热度按时间hsgswve41#
试试这个:
但是没有/结尾的http://domain.com/file返回一个页面未找到错误。
这是因为除非结尾有
/
,否则您的规则不匹配。您可以将
?
设置为可选,如请注意,
/
前面不需要\
。无论有没有它,它都可以工作。我还需要知道如何将http://domain.com/file.php自动重定向到http://domain.com/file/
如果你先让它工作,我们可以看到我们可以做什么关于查询参数。
您的最终htaccess可能看起来像
fgw7neuy2#
你可能会想要这样的东西:
[R=301]
的附件会将浏览器重定向到新的URL,并带有一个301,永久移动的状态头。这样,浏览器就可以知道在哪里找到正确的URL,而不需要询问服务器。此外,有时.htaccess检查器也很有用:http://htaccess.madewithlove.be/请注意,该工具不适用于
%{REQUEST_FILENAME}
。ojsjcaue3#
如果你想让
domain.com/help
加载domain.com/help.php
,并且仍然加载所有的jpg/png/css/img等,使用这个: