Php mod_重写隐藏文件扩展名
my.htaccess对所有请求使用主“files.php”。 在my files.php中,我有一些包含HREF的代码,如下所示:Php mod_重写隐藏文件扩展名,php,.htaccess,mod-rewrite,Php,.htaccess,Mod Rewrite,my.htaccess对所有请求使用主“files.php”。 在my files.php中,我有一些包含HREF的代码,如下所示: RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^/([a-z0-9-_]+)/([a-z0-9-_]+)/?$ RewriteRule ^(.*) http://%{HTTP_HOST}/%1.php?q=%2 [P] /people/john-->当一个人点击这个时,它应该转到:p
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/([a-z0-9-_]+)/([a-z0-9-_]+)/?$
RewriteRule ^(.*) http://%{HTTP_HOST}/%1.php?q=%2 [P]
/people/john
-->当一个人点击这个时,它应该转到:people.php?q=john
但是,当用户单击此/people/john
时,my.htaccess不会重定向。
顺便说一句,url应该总是说/people/john
而不是people.php?q=john
,即使这是幕后发生的事情
只是想说,我有
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) /files.php?q=$1
RewriteCond %{HTTP_HOST} ^mysite.com
RewriteRule (.*) http://m.mysite.com/$1 [R=301,L]
AddHandler application/x-httpd-php5 .html .htm .txt .php
我一直在这里苦苦寻找,希望能找到准确的答案,但仍然没有运气。我感谢所有的答复 是否要使其动态化?我的意思是,
/$anything1/$anything2
将被重新映射到/$anything1.php?=$anything2
:
/city/newyork --> city.php?q=newyork
/country/australia --> country.php?q=australia
或者,如果上述代码不起作用,请尝试以下操作:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/([a-z0-9-_]+)/([a-z0-9-_]+)/?$
RewriteRule ^(.*) /%1.php?q=%2
根据您的示例,您得到的url如下所示:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/([a-z0-9-_]+)/([a-z0-9-_]+)/?$
RewriteRule ^(.*) http://%{HTTP_HOST}/%1.php?q=%2 [P]
如果这是您想要的,请尝试以下方法:
选项+FollowSymLinks
重新启动发动机
/city/newyork, where city is the php file to call with parameter newyork
下面是我对CodeIgniter的使用(支持非常深的a/b/c/d/e/f/g) 基本上一行一行地写着
-打开重写引擎
-使用web_root(如果您在子文件夹中,则它可能不适合您)
-如果url不是现有文件
-并且url不是现有目录
-将参数映射到files.php
刚刚意识到您正在使用Files.php。。。奇怪的是,如果它是所有东西都应该通过的路径,那么应该将其称为索引以保持一致性,或者创建一个索引,将文件夹/文件/*路由到index.php?tab=files&
希望这对Faa有所帮助,我照你说的做了,下面是我的服务器变量,我认为正确的变量应该是下面写着“应该是这个”的变量
你并不孤单,mod_重写规则可能会让人困惑。我很想看到这个问题的解决方案……我们需要看到您正在谈论的代码;我们不能仅仅因为知道它不起作用而有所帮助。G-Nuggets,我的代码包含在上面。所有url都在“files.php”中处理,因此files.php就像处理所有内容的主索引或目录。因此,它包含如下内容:/city/newyork等。在url上,它看起来像是/city/newyork,但在场景背后,这实际上是渲染的脚本:city.php?q=newyork。我想@G-Nugget(和我们其他人)希望看到的是一个示例href-整个标签。请包括2到3个不同的例子来演示href中的url。files.php代码本身是直接的,基本上我是在查询数据库并将用户信息插入href。当我使用country.php?q=australia强制它时,代码运行平稳,问题是当我尝试单击浏览器上的href链接时,什么都没有发生,它基本上停留在屏幕上,并闪烁。谢谢你的评论。谢谢,但它仍然不起作用,我正在使用cpanel,你认为除了。htaccess还有什么我应该寻找的吗?就像在apache虚拟主机中一样?也许有些东西设置不正确?谢谢,但它仍然不起作用,我正在使用cpanel,你认为除了。htaccess还有什么我应该寻找的吗?就像在apache虚拟主机中一样?也许有些东西设置不正确?你有不定式循环吗?我认为它在重写规则行的末尾缺少了一个[L]。哦,天哪,你的解决方案太接近了,所以文件夹结构可以工作,但是当我只有www.mywebsite.com/newyork时,它正在将其更改为www.mywebsite.com/newyork.php,它应该是www.mywebsite.com/myfiles.php?q=newyork,我们需要修复重写条件,但你的答案就要结束了!!!帮帮我:)别忘了url应该始终为:www.mywebsite.com/newyork有没有办法在mod rewrite中说出if else语句?因为你的答案适用于/city/newyork,但是如果我只有/newyork/这是一个正确的答案,那么它就会崩溃。我不得不将$\U REQUEST['q']更改为$\U SERVER['REQUEST\U URI'],这是一个魅力,我花了好几天的时间,谢谢你!!谢谢,但它仍然不起作用,我正在使用cpanel,你认为除了。htaccess还有什么我应该寻找的吗?就像在apache虚拟主机中一样?也许有些东西设置不正确?发生了什么事?你真的想重写它们还是重定向它们?根据您的问题,您的
重写引擎正在工作。无论如何,你可以查看我上面的更新。杰罗恩的解决方案很快就能找到答案。因此,他的代码基本上是可以工作的,然而,服务器正在做这件事:www.mywebsite.com/newyork.php,正如它应该是www.mywebsite.com/myfiles.php?q=newyork一样,url也应该像www.mywebsite.com/newyork这样整洁和酷,“重定向查询字符串”是“q=city/newyork”
,因此重定向是有效的。如果只需要“q=newyork”
,请不要输入city/newyork,在浏览器的栏或链接中只输入/newyork。很简单,规则会传递整个URI路径,因为这是您告诉它对(*)组所做的。要将city
从组中排除,请将规则更改为RewriteRule^city/(.*)/myfiles.php?q=$1[R,L]
,但问题不在于规则。问题在于PHP代码,正如我多次提到的。脚本中的代码,该代码应该能够将GET查询字符串分解或分离为相应的参数。像现在这样拥有整个URI路径很重要,所以不要更改规则,而是更改代码。关于如何做你需要的事情,有上百个例子,所以在这里删除你的答案,什么也不回答,然后发布另一个问题,询问代码。Faa,我发布的是两个不同服务器的完全相同的代码,做同样的事情,但是,另一个服务器就是出现问题的服务器。规则和代码是复制的,但在两个不同的服务器上共享,你认为这是问题所在吗?当然,如果两个URL结构不相同,可能会出现问题。如果没有
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ files.php?/$1 [L]
["QUERY_STRING"]=>
string(17) "q=city/newyork"
["REDIRECT_QUERY_STRING"]=>
string(17) "q=city/newyork"
["REDIRECT_STATUS"]=>
string(3) "200"
["REDIRECT_URL"]=>
string(16) "/city/newyork"
["REQUEST_URI"]=>
string(16) "/city/newyork"
["SCRIPT_FILENAME"]=>
string(30) "/home/mywebsite/myfiles.php"
["SCRIPT_NAME"]=>
string(14) "/myfiles.php"
["PHP_SELF"]=>
string(14) "/myfiles.php"
["argv"]=>
array(1) {
[0]=>
string(17) "q=city/newyork"
}
should be this:
["QUERY_STRING"]=>
string(16) "q=newyork"
["REDIRECT_QUERY_STRING"]=>
string(16) "q=newyork"
["REDIRECT_STATUS"]=>
string(3) "200"
["REDIRECT_URL"]=>
string(25) "/city/newyork"
["REQUEST_URI"]=>
string(25) "/city/newyork"
["SCRIPT_FILENAME"]=>
string(30) "/home/mywebsite/city.php"
["SCRIPT_NAME"]=>
string(14) "/city.php"
["PHP_SELF"]=>
string(14) "/city.php"
["argv"]=>
array(1) {
[0]=>
string(16) "q=newyork"
}