【发布时间】:2013-02-08 12:50:22
【问题描述】:
我使用我的 htaccess 文件来配置我网站上 url 的布局。
目前的问题是我不能再发送任何表格了。
我有两个完全包含相同代码的文件(复制和重命名)。如果我调用 page1.php,则 url 将显示为 page1.php。一切正常,而我将尝试登录或导致一些错误。现在,当我调用index.php(具有相同的代码!)时,htaccess 在 url 中隐藏了index.php,这是它应该做的!但是当我测试登录脚本时,发布表单时什么都不会发生。它只是刷新网站。所以我不知道为什么会这样?
这种行为肯定是由htaccess 通过重写规则引起的。我删除了htaccess 并再次尝试。没有它它可以工作,但仍然有这个丑陋的网址。
可以显示htaccess 中的内容:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^(.*)\.html$
RewriteRule ^.*\.html$ %1.php [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/]+)/$ $1.php
AddType application/x-httpd-php .htm .html
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
RewriteRule ^index\.(htm|html|php) http://www.domain.com/ [R=301,L]
## rewrite the index file in subdirectories
RewriteRule ^(.*)/index\.(htm|html|php) http://www.domain.com/$1/ [R=301,L]
表格将发送:
form action = "<?php echo $_SERVER['PHP_SELF']?>" method= "post"...
所以如果有人可以帮助我,我真的很感激。
更新:
提供更多信息我想达到的目标:
首先结构如下:由于语言不同,根结构如下:
www.domain.com/languagefolder/...
现在,当用户拨打www.domain.com 时,他将被重定向到languagesubfolder。当beeing被重定向到这个子文件夹的索引页面时,第一件事应该是www.domain.com/languagesfolder/index.php不可见,所以它只是www.domain.com/languagesfolder/。这将自动完成。没关系。但是当调用www.domain.com/languagesfolder/index.php时,它应该被重写为www.domain.com/languagesfolder/,这样用户就看不到.../index.php。这似乎更专业。
接下来会在更多页面上提供链接,以便用户只需输入.../page 而不是.../page.php,这样文件扩展名就不会显示。最后但并非最不重要的是,当用户试图找出它是什么类型的文件时,我想通过重写扩展名来防止 SQL 注入,以便用户可以键入 .../page.php 和 .../page.html 或.../page.htm.
【问题讨论】:
-
在提交之前表单中的实际操作是什么?例如,显示源代码并查看它的内容?
-
请用一些传入和替换 URL 示例更新您的问题。否则很难猜测这些规则的用途和理解您想要实现的目标。规则有一个
regex,它应该与传入 URL 中的pattern匹配,但如果没有 URL,则无法确定该模式。你的规则并没有真正的帮助,因为它们不起作用。 -
你好,我更新了我的问题。谢谢。
-
旁注:不要使用
PHP_SELF、it is vulnerable to XSS attacks。相反,要将表单指向当前页面,请使用action="" -
你好,感谢这个有用的提示。
标签: php forms apache .htaccess url-rewriting